package org.example.springboot.utils;

import org.example.springboot.entity.FmcData;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ReflectionUtils {

    /**
     * 获取对象的所有属性（不包括id属性）
     *
     * @param object 对象的实例
     * @return 包含除id属性外所有属性名和值的Map
     */
    public static List<String> getProperties(Object object) {
        List<String> list = new ArrayList<>();
        if (object != null) {
            Field[] fields = object.getClass().getDeclaredFields();
            for (Field field : fields) {
                try {
                    field.setAccessible(true);
                    if (!"id".equals(field.getName())) {
                        list.add(field.getName());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return list;
    }

    /**
     * 获取对象的所有属性（不包括id属性）
     * 
     * @param object 对象的实例
     * @return 包含除id属性外所有属性名和值的Map
     */
    public static Map<String, Object> getPropertiesExcludingId(Object object) {
        Map<String, Object> properties = new HashMap<>();
        if (object != null) {
            Field[] fields = object.getClass().getDeclaredFields();
            for (Field field : fields) {
                try {
                    // 设置字段可访问（如果字段是私有的）
                    field.setAccessible(true);
                    // 排除id属性
                    if (!"id".equals(field.getName())) {
                        // 获取字段的值
                        properties.put(field.getName(), field.get(object));
                    }
                } catch (IllegalAccessException e) {
                    // 处理异常，例如记录日志或抛出运行时异常
                    e.printStackTrace();
                }
            }
        }
        return properties;
    }

    // 示例用法
    public static void main(String[] args) {
        FmcData fmcData = new FmcData();

        Map<String, Object> properties = getPropertiesExcludingId(fmcData);
        // 打印除id外的所有属性
        properties.forEach((key, value) -> System.out.println(key + ": " + value));
    }
}